package br.com.foxinline.servico;

import br.com.foxinline.modelo.Cartorio;
import br.com.foxinline.modelo.Telefone;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author cadomeireles
 */
@Stateless
public class CartorioServico extends ServicoGenerico<Cartorio> {

    public CartorioServico() {
        super(Cartorio.class);
    }

    public Cartorio obterCartorio() {
        String sql = "select cartorio from Cartorio cartorio where cartorio.ativo = true";

        Query query = getEntityManager().createQuery(sql);

        return (Cartorio) query.getSingleResult();
    }

    public List<Cartorio> pesquisar(Cartorio cartorio) {

        String sql = "select cartorio from Cartorio cartorio where cartorio.ativo = true";

        if (cartorio.getRazaoSocial() != null && !cartorio.getRazaoSocial().isEmpty()) {
            sql += " and lower(cartorio.razaoSocial) like '%" + cartorio.getRazaoSocial().toLowerCase().trim() + "%'";
        }

        if (cartorio.getNomeFantasia() != null && !cartorio.getNomeFantasia().isEmpty()) {
            sql += " and lower(cartorio.nomeFantasia) like '%" + cartorio.getNomeFantasia().toLowerCase().trim() + "%'";
        }

        if (cartorio.getTitular().getNome() != null && !cartorio.getTitular().getNome().isEmpty()) {
            sql += " and lower(cartorio.titular.nome) like '%" + cartorio.getTitular().getNome().toLowerCase().trim() + "%'";
        }

        if (cartorio.getEndereco().getCidade() != null && cartorio.getEndereco().getCidade().getId() != null) {
            sql += " and cartorio.endereco.cidade = :cidade";
        }

        Query query = getEntityManager().createQuery(sql);

        if (cartorio.getEndereco().getCidade() != null && cartorio.getEndereco().getCidade().getId() != null) {
            query.setParameter("cidade", cartorio.getEndereco().getCidade());
        }

        return query.getResultList();

    }

    public Telefone pesquisarTelefone(Cartorio cartorio) {
        String sql = "select cartorio.telefone from Cartorio cartorio where cartorio = :cartorio";

        Query query = getEntityManager().createQuery(sql);

        if (cartorio != null && cartorio.getId() != null) {
            query.setParameter("cartorio", cartorio);
        }

        return (Telefone) query.getSingleResult();

    }

    public List<Cartorio> autocompletar(String query) {
        return buscarPeloNomeFantasia(query);
    }

    public List<Cartorio> buscarPeloNomeFantasia(String query) {
        List<Cartorio> cartorios = getEntityManager().createQuery("select cartorio from " + Cartorio.class.getSimpleName() + " cartorio where lower(cartorio.razaoSocial) like '%" + query.toLowerCase().trim() + "%'").getResultList();
        return cartorios;
    }
}
